TOP

Funções SQL NULL

Funções SQL IFNULL(), ISNULL(), COALESCE() e NVL()


Vejamos a seguinte tabela "Products" ("Produtos"):

ProductIDProductNameSupplierIDCategoryIDUnitPrice
1Chais1110 boxes x 20 bags18.00
2Chang1124 - 12 oz bottles19.00
3Aniseed Syrup1212 - 550 ml bottles10.00
4Chef Anton's Cajun Seasoning2248 - 6 oz jars22.00
5Chef Anton's Gumbo Mix2236 boxes21.35

Suponha que a coluna "UnitsOnOrder" seja opcional e possa conter o valor NULL.

Considere a seguinte instrução SELECT:

SELECT ProductName, UnitPrice * (UnitsInStock + UnitsOnOrder)
FROM Products

No exemplo acima, se algum dos valores "UnitsOnOrder" for igual a NULL, o resultado será NULL.

Decisão

MySQL

A função MySQL IFNULL() permite retornar um valor alternativo se a expressão for igual a NULL:

SELECT ProductName, UnitPrice * (UnitsInStock + IFNULL(UnitsOnOrder, 0))
FROM Products

ou podemos usar a função COALESCE(), por exemplo:

SELECT ProductName, UnitPrice * (UnitsInStock + COALESCE(UnitsOnOrder, 0))
FROM Products

SQL Server

A função SQL Server ISNULL() permite retornar um valor alternativo se a expressão tiver o valor NULL:

SELECT ProductName, UnitPrice * (UnitsInStock + ISNULL(UnitsOnOrder, 0))
FROM Products

ou podemos usar a função COALESCE(), por exemplo:

SELECT ProductName, UnitPrice * (UnitsInStock + COALESCE(UnitsOnOrder, 0))
FROM Products

MS Access

A função MS Access IsNull() retorna TRUE (-1) se a expressão for nula, caso contrário FALSE (0):

SELECT ProductName, UnitPrice * (UnitsInStock + IIF(IsNull(UnitsOnOrder), 0, UnitsOnOrder))
FROM Products

Oracle

A função Oracle NVL() atinge o mesmo resultado:

SELECT ProductName, UnitPrice * (UnitsInStock + NVL(UnitsOnOrder, 0))
FROM Products

ou podemos usar a função COALESCE(), por exemplo:

SELECT ProductName, UnitPrice * (UnitsInStock + COALESCE(UnitsOnOrder, 0))
FROM Products